"""
实例属性(只有对象可以访问)：self.xxx（类） 或者对象.XXX
类属性（类和对象都可以访问）：类名 .xxx

1）实例属性和类属性的优先级？同名会不会覆盖？
对于对象而言，自己有就用自己的，自己没有，就用类的，自己和类都没有，就报错

2）类属性修改   --类方法（所有实例的共性） cls - 代表当前类
@classmethod
def 类方法名（cls）：
方法实现

与实例方法的区别
实例方法：self 对象调用
类方法： cls @classmethod   类和对象都可以调用，一般是类去调用

3)静态方法 --普通函数，没有必定要传的参数 - 没有必然的参数类或者对象，只不过呢，他是放在类里面
@staticmethod
def 函数名称（）：
    函数实现
"""
import random

class Person:

    # 类属性 = 值
    colar = "黄种人"

    @classmethod
    def update_class_color(cls):
        cls.colar = "全世界的人"
        print(f"类的color为：{cls.colar}")

    def __init__(self, name, sex, city, age = 18):
        self.my_name = name   #给对象添加name属性,给对象赋值
        self.my_sex = sex
        self.my_city = city
        self.my_age = age



    def eat(self,food):
        self.cooking()
        print("我喜欢吃{}".format(food))

    def study(self):
        pass

    def cooking(self):
        pass

    def find_another_friend(self,has_friend,food=None):
        """
        年龄 > 18  没有对象的，否则就不谈
        :param has_friend:True或者False，True表示有对象，False表示没有对象
        :return:
        """

        if self.my_age >= 18 and has_friend is False:
            print("{}需要找对象".format(self.my_name))
            # 告诉别人我喜欢吃什么
            print("我喜欢吃{}".format(food))
            # 两种方法或者这种
            # self.eat(food)

        else:
            print("不需要找对象")
        pass

    def play(self):
        pass

    def update_colar(self):
        self.colar = "中国汉族"
        print("对象的colar为：{}".format(self.colar))

    def play_something_by_weather(self):
        # 根据天气判断玩儿什么
        today_w = self.get_weather
        pass

    @staticmethod
    def get_weather():
        weather = ["晴天", "雨天", "多云", "小雨", "暴雨"]
        index = random.randint(0, len(weather)-1)
        return weather[index]

# 类名访问类属性
print(Person.colar)
Person.update_class_color()
print("===============================")
# 对象访问类属性
tz = Person("清欢", "男", "成都", 18)
print(tz.colar)
tz.update_colar()
tz.play_something_by_weather()